package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaNewsTypeMapper;
import com.dkm.orproject.dkmoa.domain.OaNews;
import com.dkm.orproject.dkmoa.domain.OaNewsType;
import com.dkm.orproject.dkmoa.service.OaNewsService;
import com.dkm.orproject.dkmoa.service.OaNewsTypeService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @PROJECT_NAME: orproject
 * @DESCRIPTION:
 * @USER: 周佳佳
 * @DATE: 2020/8/4 10:07
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaNewsTypeServiceimpl implements OaNewsTypeService {
    @Autowired
    OaNewsTypeMapper oaNewsTypeMapper;
    @Autowired
    OaNewsService oaNewsService;
    @Resource
    IdToobtainUtils utils;
    /**
     * 新闻类型的查询所有方法
     * @param page      当前页数
     * @param limit     显示行数
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 返回新闻类型的集合
     */
    @Override
    public List<OaNewsType> selectAll(OaNewsType oaNewsType, String startTime, String endTime,Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        return oaNewsTypeMapper.selectAll(oaNewsType,startTime,endTime);
    }

    @Override
    public Long rowCount(OaNewsType oaNewsType, String startTime, String endTime) {
        return oaNewsTypeMapper.rowCount(oaNewsType,startTime,endTime);
    }
    /**
     * 新闻类型的增加方法
     * @param record 增加的模型
     * @return 返回增加的行数
     */
    @Override
    public int insertSelective(OaNewsType record) {
        //新闻类型id为随机生成
        record.setPkNewsTypeId(utils.getNumberId());
        return oaNewsTypeMapper.insertSelective(record);
    }
    /**
     * 新闻类型修改的方法
     * @param record 修改的模型
     * @return 返回修改的行数
     */
    @Override
    public int updateByPrimaryKeySelective(OaNewsType record) {
        return oaNewsTypeMapper.updateByPrimaryKeySelective(record);
    }
    /**
     * 根据主键查询新闻类型
     * @param pkNewsTypeId 新闻类型主键
     * @return 返回新闻类型模型
     */
    @Override
    public OaNewsType selectByPrimaryKey(Long pkNewsTypeId) {
        return oaNewsTypeMapper.selectByPrimaryKey(pkNewsTypeId);
    }

    /**
     * 批量逻辑删除id
     * @param list 新闻类型的id集合
     * @return 返回修改的结果行数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return oaNewsTypeMapper.deleteAll(list);
    }


    /**
     * 查询出有效的新闻类型
     * @return 返回数据
     */
    @Override
    public List<OaNewsType> selectValid() {
        return oaNewsTypeMapper.selectValid();
    }

    /**
     * 根据新闻类型id查询新闻
     * @return 返回数据
     */
    @Override
    public List<Map<String,Object>> selectTypeAndNews() {
        List<Map<String,Object>> list=new ArrayList<>();
        List<OaNewsType> oaNewsTypes = oaNewsTypeMapper.selectValid();
        for (OaNewsType oaNewsType : oaNewsTypes) {
            List<OaNews> listTwo=oaNewsService.selectNewsType(oaNewsType.getPkNewsTypeId());
            Map<String, Object> map=new ConcurrentHashMap<>();
            map.put("newsType",oaNewsType);
            map.put("news",listTwo);
            list.add(map);
        }
        return list;
    }
}
